package com.yitiao.designmodel.behave.chain.check;

import lombok.Data;

import java.util.Objects;

/**
 * 处理器抽象类
 */
//@Component  加入容器后可以更方便管理
@Data
public abstract class AbstractCheckHandler {

    abstract Boolean handle(ProductVO param);

    /**
     * 当前处理器持有下一个处理器的引用
     */
    protected AbstractCheckHandler nextHandler;

    /**
     * 表示每个处理器的动态配置类，可以通过“配置中心”动态修改该配置，
     * 实现处理器的“动态编排”和“顺序控制”。
     */
    protected ProductCheckHandlerConfig config;

    /**
     * 链路传递
     */
    protected Boolean next(ProductVO param) {
        //下一个链路没有处理器了，直接返回
        if (Objects.isNull(nextHandler)) {
            return true;
        }

        //执行下一个处理器
        return nextHandler.handle(param);
    }

}
